package com.sqbr.video.common.interceptor;

import cn.dev33.satoken.stp.StpUtil;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@Component
public class CustomInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        // 在这里执行拦截逻辑
        // 比如，检查用户是否登录
        // 如果用户未登录，可以返回 false 来阻止请求继续处理
        // 并可以设置响应状态码和消息
        
        // 假设我们有一个简单的登录检查逻辑
        if (!isUserLoggedIn(request)) {
            response.setStatus(HttpServletResponse.SC_FORBIDDEN); // 403 Forbidden
            response.getWriter().write("User is not logged in");
            return false;
        }
        
        // 如果用户已登录，返回 true 以允许请求继续处理
        return true;
    }

    // 您需要实现这个方法，以检查用户是否登录
    private boolean isUserLoggedIn(HttpServletRequest request) {
        // 这里可以是任何检查用户登录状态的逻辑
        // 比如检查 session 中的某个属性
       try {
           StpUtil.checkLogin();
       }catch (Exception e) {
           System.out.println("用户未登录");
           return false;
       }
        return true; // 示例：假设用户未登录
    }

    // postHandle 和 afterCompletion 方法可以根据需要覆盖
    // @Override
    // public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
    //     // 处理后的逻辑
    // }

    // @Override
    // public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
    //     // 清理资源或记录日志等
    // }
}